module one_point#(
	parameter	P_ADD_NUM	= 17'd8192	,
	parameter	P_DGC		= 10'd5
)(
	input			i_clk			,
	input			i_rst_n			,
		
	/******模块信号输入*******/
	input			i_hsync			,
	input			i_vsync			,
	input			i_de			,
	input	[13:0]	i_data			,
		
	/*******sdram信号输入********/
	output			o_RD1			,
	input	[13:0]	i_RD1_DATA		,
	
	
	/*********单点结果输出***********/
	output			o_hs			,
	output			o_vs			,
	output			o_de			,
	output	reg [13:0]	o_data	
);


	
reg		[13:0]	ri_data			;//对应img[13:0]
reg		[14:0]	r_sub0			;//对应nuc[14:0]
wire	[24:0]	r_mult0 		;//对应gnuc0[24:0]
reg		[16:0]	r_right_shift	;//对应gnuc1[24:0]
reg		[16:0]	r_add0			;//对应gnuc2[24:0]

assign	o_RD1 = i_de;

always@(posedge i_clk or negedge i_rst_n)
begin
	if(!i_rst_n)
		ri_data <= 'd0;
	else 
		ri_data <= i_data;
end 	

//有符号
always@(posedge i_clk or negedge i_rst_n)
begin
	if(!i_rst_n)
		r_sub0 <= 'd0;
	else 
		r_sub0 <= {1'b0,ri_data} - {1'b0,i_RD1_DATA};
end 

//有符号乘法器
multi_ip	multi_ip_u0 (
	.clock 	( i_clk 	),
	.dataa 	( r_sub0 	),
	.datab 	( P_DGC 	),
	.result ( r_mult0 	)
);

always@(posedge i_clk or negedge i_rst_n)
begin
	if(!i_rst_n)
		r_right_shift <= 0;
	else 
		r_right_shift <= r_mult0[24:8];
end 

always@(posedge i_clk or negedge i_rst_n)
begin
	if(!i_rst_n)
		r_add0 <= 'd0;
	else 
		r_add0 <= r_right_shift + P_ADD_NUM;
end 


//低14位的高八位，判断符号和16383
always@(posedge i_clk or negedge i_rst_n)
begin
	if(!i_rst_n)
		o_data <= 'd0;
	else if(r_add0[16] == 1)
		o_data <= 'd0;
	else if(r_add0 >= 'd16383)
		o_data <= 'd16383;
	else 
		o_data <= r_add0[13:0];
end 

ast_nbp_shift_regs#(
.DWIDTH     (3),//数据位宽
.DELAY_DUTY (9)//延迟的时钟周期数，最小是1
)ast_nbp_shift_regs_u0(
    .clk		(i_clk),
	.rst_n		(i_rst_n),
	.idata		({i_hsync,i_vsync,i_de}	),
	.odata      ({o_hs,o_vs,o_de})
);

endmodule